﻿//using Kingdee.BOS.App.Data;
//using Kingdee.BOS.Core.DynamicForm;
//using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
//using Kingdee.BOS.Core.List;
//using Kingdee.BOS.Core.List.PlugIn;
//using Kingdee.BOS.Orm.DataEntity;
//using Kingdee.BOS.Util;
//using Newtonsoft.Json.Linq;
//using System;
//using System.Collections.Generic;
//using System.ComponentModel;
//using System.IO;
//using System.Linq;
//using System.Net;
//using System.Net.Http;
//using System.Text;
//using System.Threading.Tasks;

//namespace WSDZ.KM.ZH.SalInvoiceDownloadFile6.SalVatSpecialInvoice
//{
//    [Description("销售增值税专票下载文件"), HotUpdate]
//   public class SalVatSpecialInvoiceDownloadFile : AbstractListPlugIn
//    {
//        public string btype { get; set; } = "销售增值税专票下载文件";
//        public string logType { get; set; } = "销售增值税专票下载文件";
//        public string directory { get; set; } ="";
//        public override void AfterBarItemClick(AfterBarItemClickEventArgs e)
//        {
//            base.AfterBarItemClick(e);
//            //下载发票文件
//            if (e.BarItemKey.EqualsV1("btnDownloadInvoiceFile"))
//            {
//                try
//                {
//                    var lv = this.View as IListView;
//                    if (lv == null)
//                    {
//                        View.ShowErrMessage($@"无数据!!!");
//                        return;
//                    }
//                    var selectedRows = lv.SelectedRowsInfo;
//                    if (selectedRows == null || selectedRows.Count == 0)
//                    {
//                        this.View.ShowMessage("当前没有行被选中！");
//                        return;
//                    }
//                    List<int> ids = selectedRows.Select(x => x.PrimaryKeyValue.ToStringV1().ToInt32V1()).Distinct().ToList();
//                    DynamicFormShowParameter formPa = new DynamicFormShowParameter();
//                    formPa.FormId = "RLKX_ChoseInvoiceDirectoryForm";
//                    View.ShowForm(formPa, result => {
//                        string txt = result.ReturnData.ToStringV1();
//                        if (!txt.IsNullOrEmptyOrWhiteSpace())
//                        {
//                            JObject resObj = JObject.Parse(txt);
//                            if (resObj["status"].ToBoolean())
//                            {
//                                string path = resObj["path"].ToStringV1();
//                                directory = path;
//                                DownloadFiles(ids);
//                            }
//                            else
//                                return;
//                        }
//                        else
//                            return;
//                    });
                 
//                }
//                catch (Exception ex)
//                {
//                    View.ShowErrMessage($@"异常SI001【{ex.Message}】");
//                    return;
//                }
//            }
//        }
//        public void DownloadFiles(List<int> idList)
//        {
//            if (directory.IsNullOrEmptyOrWhiteSpace())
//            {
//                View.ShowErrMessage("发票文件保存地址不可空!!!");
//                return;
//            }
//            List<InvoiceData> dataList = new List<InvoiceData>();
//            int size = 2000;
//            int icount = idList.Count <= size ? 1 : idList.Count % size > 0 ? idList.Count / size + 1 : idList.Count / size;
//            for (int i = 0; i < icount; i++)
//            {
//                List<int> ids = idList.Skip(size * i).Take(size).ToList();
//                string sql = $@"/*dialect*/ select 
//id=fp.FID
//,billNo=fp.FBILLNO
//,networkAddress=fpO.FPDFURLCOPY
//from T_IV_SALESIC fp
//left join T_IV_SALESIC_O fpO on fp.FID=fpO.FID
//where fp.FID in ({string.Join(",", ids)})
//and ISNULL(fp.FBILLNO,'')<>''
//and ISNULL(fpO.FPDFURLCOPY,'')<>''";
//                DynamicObjectCollection datas = DBUtils.ExecuteDynamicObject(Context,sql);
//                if (datas!=null&&datas.Count>0)
//                {
//                    List<InvoiceData> dlist = datas.DynamicObjectCollectionToDataList<InvoiceData>();
//                    dataList.AddRange(dlist);
//                }
//            }
//            if (dataList.Count<1)
//            {
//                View.ShowErrMessage($@"不存在符合条件的发票单!!!");
//                return;
//            }
//            if (!Directory.Exists(directory))
//                Directory.CreateDirectory(directory);
            
//            foreach (InvoiceData data in dataList)
//            {
//                try
//                {
//                    var dobj = ToDownload(data);
//                    data.status = dobj.Item1;
//                    data.msg = dobj.Item2;
//                }
//                catch (Exception ex)
//                {
//                    LogHelper.Log($"【发票单号：{data.billNo}】【地址：{data.networkAddress}】下载发票文件异常【SI002】\n异常信息：{ex.Message}");
//                    continue;
//                }
//            }
//            string msg = "操作完成";
//            List<InvoiceData> successList = dataList.Where(x => x.status).ToList();
//            List<InvoiceData> errorList = dataList.Where(x => !x.status).ToList();
//            msg = $"{msg}\n成功条数{successList.Count}\n失败条数{errorList.Count}";
//            List<string> errormsgList = errorList.Select(x => $@"单号：{x.billNo};错误信息：{x.msg}").ToList();
//            if (errormsgList.Count>0)
//                msg += $"\n{string.Join("\n", errormsgList)}";
//            View.ShowMessage(msg);
//        }
//        public Tuple<bool,string> ToDownload(InvoiceData data)
//        {
//            using (WebClient client = new WebClient())
//            {
//                try
//                {
//                    string path = $@"{directory}\{data.billNo}.pdf";
//                    if (File.Exists(path))
//                        return Tuple.Create(false, "该发票文件已存在!!!");
//                    else
//                    {
//                        client.DownloadFile(data.networkAddress,path);
//                        return Tuple.Create(true, path);
//                    }
//                }
//                catch (Exception ex)
//                {
//                    return Tuple.Create(false, $@"下载异常【SI003】【{ex.Message}】");
//                }
//            }

//        }
//    }
//    public class InvoiceData
//    {
//        public int id { get; set; }
//        public string billNo { get; set; }
//        public string networkAddress { get; set; }
//        public string filePath { get; set; }
//        public bool status { get; set; }
//        public string msg { get; set; }
//    }

//}
